<template>
  <DataList 
  
  addQuery='教师性质.contains("校内") or 教师性质.contains("其他")'
ref="datalist"
            :cate="cate"
            :cols="cols"
            :excelHeader="excelHeader"
            :name="name"
            skipExcelNumber="3"> <template slot="search">
              <el-form-item>
                <el-input 
v-model="search_str"
                          placeholder="请输入教师名字或工号搜索"
                          clearable
                          @change="clear"
                          @input="mysearch" />
              </el-form-item>
  </template></DataList>
</template>
<script>
import DataList from '@/components/DataList'
import { getUser } from '@/utils/auth'
import { findComponent } from '@/utils/ui'
import linq from 'linq'
import { get机构设置 } from '@/api/机构设置'
import { get教师基本情况, update教师基本情况, delete教师基本情况, add教师基本情况, bulkAddJsjbqk } from '@/api/教师基本情况'
export default {
  components: {
    DataList
  },
  data() {
    return {
      search_str: '',
      cate: 'A6校内教师基本情况表',
      name: '6.1 教师基本情况',
      excelHeader: { B3: '教师性质', C3: '系部代码', D3: '所属系部', E3: '教工号', F3: '姓名', G3: '性别', H3: '出生日期', I3: '民族', J3: '学历', K3: '学位', L3: '专业领域', M3: '专业特长', N3: '高校教师资格证', N4: '发证单位（全称）', O4: '获取日期（年月）', P3: '行业、企业一线工作时间', P4: '历年（年）', Q4: '本学年（天）', R3: '专业技术职务（最高）', R4: '等级', S4: '名称(全称)', T4: '发证单位', U4: '获取日期（年月）', V3: '职业资格证书', V4: '等级', W4: '名称(全称)', X4: '发证单位', Y4: '获取日期（年月）', Z3: '职务', AA3: '是否专业教师', AB3: '是否为骨干教师', AC3: '是否为双师素质教师', AD3: '教学名师', AE3: '行政所属专业', AE4: '专业代码', AF4: '专业名称' },
      cols: [
         { label: "部门编号", prop: "BMBH" },
        { label: '教师所属系部', prop: 'BMMC' },
        { label: '教师性质', prop: '教师性质' },
        { label: '教工号', prop: 'GH' },
        { label: '姓名', prop: 'XM' },
        { label: '性别', prop: 'XZ_XB' },
        { label: '出生日期', prop: 'CSRQ' },
        { label: '民族', prop: 'XZ_MZ' },
        { label: '学历', prop: 'XZ_XL' },
        { label: '学位', prop: 'XZ_XW' },
        { label: '专业领域', prop: 'XZ_ZYLY' },
        { label: '专业特长', prop: 'ZYTC' },
        { label: '行业丶企业一线工作时间', prop: '行业企业一线工作时间',
          data:
            [
              { label: '历年(年)', prop: 'HYYXGZSJ_LN' },
              { label: '本学年(天)', prop: 'HYYXGZSJ_BXN' }
            ]
        },
        { label: '专业技术职务(最高)', prop: '专业技术职务',
          data:
            [
              { label: '等级', prop: 'XZ_ZYJSZW_DJ' },
              { label: '名称(全称)', prop: 'ZYJSZW_MC' },
              { label: '发证单位(全称)', prop: 'ZYJSZW_FZDW' },
              { label: '获取日期(年月)', prop: 'ZYJSZW_HQRQ' }
            ]
        },
        { label: '高教师资格证', prop: '高教师资格证',
          data:
            [
              { label: '发证单位(全称)', prop: 'JSZGZ_FZDW' },
              { label: '获取日期(年月)', prop: 'JSZGZ_HQRQ' }
            ]
        },
        { label: '所任职务', prop: 'ZW' },
        { label: '是否为骨干教师', prop: 'XZ_SFGGJS' },
        { label: '是否为双素质教师', prop: 'XZ_SFSSSZ' },
        { label: '教学名师', prop: 'XZ_JXMS' },
        {
          label: '行政所属专业', prop: '行政所属专业',
          data: [
            { label: '专业代码', prop: 'ZYSKZYDM' },
            { label: '专业名称(全称)', prop: 'ZYSKZYMC' }
          ]
        }]
    }
  },
  methods: {
    onChange(model, field, value) {
      if(field == "ZYSKZYMC"){
        var data = linq.from(this.$root.开设专业).firstOrDefault(`$.ZYMC=='${value}'`);
        if(data)
        model["ZYSKZYDM"] = data.ZYDM;
      }
    },
    async onDlgCreated() {
      var bmmc = findComponent(this, 'BMMC')
      var 机构设置 = await get机构设置(this.$root.user.XXID, this.$root.user.CJPC)
      var data = linq.from(机构设置).select('{...$,value:$.BMMC}').distinct('$.value').toArray()
      bmmc.$attrs.items = data
      //

      var zyskzymc = findComponent(this,"ZYSKZYMC");
      data = linq.from(this.$root.开设专业).select(`{value:$.ZYMC}`).distinct(`$.value`).toArray();
      zyskzymc.$attrs.items = data;
    },

    check(array, list) {
      return new Promise(async(resolve, reject) => {
        try {
          var user = getUser()
          var 机构设置 = await get机构设置(this.$root.user.XXID, this.$root.user.CJPC)

          var err = linq.from(array).select('$.BMMC').except(linq.from(机构设置).select('$.BMMC').toArray()).toArray()
          linq.from(array).where(e => err.indexOf(e.BMMC) !== -1).forEach(e => e.error = e.error ? e.error + ';' : '' + '数据库中不存在对应的机构名称')

          var duplicates = linq.from(array).groupBy('$.GH').where('$.count()>1').toArray()
          duplicates.forEach(e => {
            linq.from(array).where(t => t.GH == e.key()).forEach(t => t.error = '录入数据存在相同的教工号')
          })
          // 是否已经存在数据
          var err = linq.from(array).select('$.GH').intersect(linq.from(list).where("$.教师性质").select('$.GH').toArray()).toArray()
          linq.from(array).where(e => err.indexOf(e.GH) !== -1).forEach(e => e.error = e.error ? e.error + ';' : '' + '数据库中已经存在教工号')
          // 把错误的教师姓名替代掉
          
          resolve()
        } catch (e) {
          reject(e)
        }
      })
    },
  

    async fetchData() {
      var user = getUser()
      var datas = await get教师基本情况(user.XXID, user.CJPC)

      var param = this.$route.query.param
      if (param) {
        return linq.from(datas)
          .where(x => x.教师性质 == param.教师性质)
          .toArray()
      } else {
        return linq.from(datas)
          .where(x => x.教师性质 == '校内兼课' || x.教师性质 == '校内专任')
          .toArray()
      }
    },
    add_check(model, list) {
      var first = linq.from(list).firstOrDefault(e => e.GH == model.GH)
      console.log(first)
      if (first) { return '已经存在对应教工号教师' }
    },
    onadd(model) {
      //
      var temp = JSON.parse(JSON.stringify(model))
      return new Promise(async(resolve, reject) => {
        console.log(JSON.stringify(temp))
        var model = await add教师基本情况(temp)
        resolve(model)
      })
    },
    async  bulkAdd(array) {
      await bulkAddJsjbqk({ Jsjbqk: array })
    },
    onupdate(model) {
      //
      var temp = JSON.parse(JSON.stringify(model))
      return new Promise(async(resolve, reject) => {
        console.log(JSON.stringify(temp))
        var model = await update教师基本情况(temp)
        resolve(model)
      })
      //
    },
    ondelete(model) {
      var temp = JSON.parse(JSON.stringify(model))
      return new Promise(async(resolve, reject) => {
        await delete教师基本情况(temp)
        resolve()
      })
    }
  }

}
</script>
<style>
</style>
